package main

import (
	"fmt"
)

/*===开启两个goroutine===
    - 一个goroutine 存 1~100 的数，ch1
	- 一个 goroutine 从通道 ch1 中取出数，每个数平方后存入 ch2
*/
func main() {
	ch1 := make(chan int, 100)
	ch2 := make(chan int, 200)

	go f1(ch1)
	go f2(ch1, ch2)

	//从ch2 中取出所有结果
	/* [note] 从通道取值的方式二 */
	for ret := range ch2 {
		fmt.Println("ch2 = ", ret)
	}
}

/* [01] 单向通道，只能向 ch1 中写入值 */
func f1(ch chan<- int) {
	for i := 0; i < 100; i++ {
		ch <- i
	}
	close(ch)

}

/* [note] 单向通道，只能从ch1中取(接收)值，只能向ch2中写(发送)值 */
func f2(ch1 <-chan int, ch2 chan<- int) {
	/* [note] 从通道取值的方式一 */
	for {
		tmp, ok := <-ch1
		if !ok {
			break
		}
		ch2 <- tmp * tmp
	}
	close(ch2)
}
